package cn.zd.util;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

/**
 * @author zhangdong
 * @version 1.0.0
 * <p>
 * @ClassName HttpTools.java
 * @createTime 2023/03/24 20:13:00
 */
public class HttpTools {

    /**
     * 保存指定网页上的指定的文件
     *
     * @param url      网页地址
     * @param selector 选择器
     * @param folder   保存路径
     */
    public static void saveFile(String url, String selector, String folder) {
        try {
            // Jsoup打开网络连接获取到DOM(html)文件
            Document doc = Jsoup.connect(url).get();
            Elements elements = doc.select(selector);
            String src = null;
            for (Element element : elements) {
                // 获取图片的地址
                src = element.attr("src");
                System.out.println("图片地址：" + src);

                // 下载图片
                download(src, folder);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("下载完成！");

    }

    /**
     * 下载指定路径的文件
     *
     * @param urlPath 网页地址
     * @param folder  保存路径
     */
    public static void download(String urlPath, String folder) {
        // 1.获取文件名
        String fileName = urlPath;
        // 截取有效的图片路径
        int index = fileName.indexOf("?");
        if (index != -1) {
            fileName = fileName.substring(0, fileName.indexOf("?"));
        }

        fileName = fileName.substring(fileName.lastIndexOf("/"));
        fileName = folder + fileName;

        URLConnection conn = null;
        InputStream is = null;
        OutputStream os = null;
        try {
            // 下载文件，第一步：创建输入流
            URL url = new URL(urlPath);
            conn = url.openConnection();
            is = conn.getInputStream();

            // 下载文件，第二步：创建输出流
            os = new FileOutputStream(fileName);

            // 下载文件，第三步：读写数据
            byte[] buffer = new byte[600];
            int len = -1;
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 下载文件，第四步：释放资源
            try {
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        System.out.println("下载完成！");
    }

    /**
     * 下载远程的HTML文档
     *
     * @param url 网页地址
     */
    public static void parsePage(String url) {
//        try {
//            //下载远程的HTML文档
//            Document doc = Jsoup.connect(url).get();
//            Elements elements = doc.select("body > div.wrap.listpage.clearfix > div.pageleft.fl > div.content > p:nth-child(8)");
//// body > div.wrap.listpage.clearfix > div.pageleft.fl > div.content > p:nth-child(20)
//            //通过选择器，查找符合要求的元素
//            Element element = doc.selectFirst("body > div.wrap.listpage.clearfix > div.pageleft.fl > div.content > p:nth-child(8)");
//
//            //获取元素的数据
//            String title = element.text();
//            System.out.println("新闻标题: " + title);
//
//            element = doc.selectFirst("#content > div.post_body > p.otitle");
//            System.out.println("原标题: " + element.text());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
    }
}
